package com.xinyue.auto.reader.major;

import java.util.ArrayList;
import java.util.List;

import org.dom4j.Element;

import com.xinyue.auto.reader.Process;
import com.xinyue.auto.reader.ProcessContext;
import com.xinyue.auto.reader.util.JavaTypeUtil;
import com.xinyue.auto.util.StringUtil;

public abstract class AttributeMajor extends ProcessContext{
	public AttributeMajor(Process read) {
		super(read);
	}
	
	//注解集
	protected List<String> anns = new ArrayList<String>();
	protected String name;//属性名称
	protected String type;//属性类型
	protected String desc;//描述信息
	
	/**
	 * 读取Id或者property的共有属性
	 * @param prop
	 * @return
	 * @throws Exception
	 */
	protected void commonRead(Element prop) throws Exception {
		if(anns.size() > 0) {
			anns.clear();
		}
		name = prop.attributeValue(name_);
		type = prop.attributeValue(type_);
		desc = prop.attributeValue(desc_);
		
		if(StringUtil.isNull(name)) {
			throw new Exception("没有定义name属性或其值为空");
		}
		if(StringUtil.isNull(type)) {
			throw new Exception("没有定义type属性或其值为空");
		}
		//验证属性类型是否合法
		String pkg = JavaTypeUtil.validate(type);
		if(pkg != null) {
			holder.getBeanImpt().add(pkg);
		}
		
		//注解信息以及数据库字段信息
		columnAnn(prop);
	}
	
	/**
	 * 读取Id或者property标签上属性信息，并封装成JPA的注解类型
	 * @throws Exception 
	 */
	protected abstract void columnAnn(Element prop) throws Exception;
}